Amazon QuickSightでAthenaのDatasetを作成する際にエラーとなる場合の対処
こんにちは、CX事業本部 IoT事業部の若槻です。
Amazon QuickSightは、各種AWS Serviceと直接接続してデータを取得し、ダッシュボード上で可視化できるサービスです。
今回、QuickSightを久し振り触ってみたところ、AthenaのDatasetを作成する際にエラーとなりすごくハマってしまったので、その際の対処の経緯について書き残しておきます。
事象、対処の経緯
次のようなAthenaでクエリ可能な環境があります。
- WorkGroup:
AthenaWorkGroup
- Database:
data_catalog
- Table:
data_glue_table
このAthenaクエリをデータソースとするDatasetをQuickSightで作成しようとしました。
QuickSightの管理コンソールで、[Datasets]タブで[New dataset]をクリック。
データソースの種類として[Athena]を選択。
すると次のようなエラーとなりました。
Unable to retrieve Athena workgroups. Wait a few moments and click here to try again.
一応、日本語コンソールならこんな感じになります。
Athena ワークグループを取得できません。しばらく待ってから、 こちらをクリックしてから再度お試しください。
[click here to try again]リンクをクリックしてもエラーは出続けます。そこで、QuickSightに適切なアクセス権限があるか確認してみます。
右上のメニューで[Manage QuickSight]をクリック。
[Security & permissions > Access granted to 4 services]を見ると、Athenaに対する権限が無いようです。
Athenaへの権限を付与してみます。[Manage]をクリック。
Amazon Athenaにチェックを入れます。
するとQuickSight needs permissions to access Amazon S3 buckets or AWS lambda functions used by Athena
と表示されるので[Skip]をクリック。(S3 Bucketへのアクセス権限が必要という内容ですが、後ほど対処します)
[Save]をクリック。
ここで次のようにIAM Roleが更新できない旨のエラーが表示されますが、[Cancel]をクリック。(これも後ほど確認します)
We cannot update the IAM Role. The reason could be one or more from the following:
- The role does not explicitly trust QuickSight service principal.
- Following policies are either not attached to the QuickSight role or attached to more than one:
- arn:aws:iam::300561038900:policy/service-role/AWSQuickSightRDSPolicy
- arn:aws:iam::300561038900:policy/service-role/AWSQuickSightS3Policy
- arn:aws:iam::300561038900:policy/service-role/AWSQuickSightIAMPolicy
- arn:aws:iam::300561038900:policy/service-role/AWSQuickSightRedshiftPolicy
- Make sure the credentials you're using have following permissions:
- iam:CreateRole, iam:CreatePolicy, iam:AttachRolePolicy, iam:CreatePolicyVersion,iam:DeletePolicyVersion, iam:ListAttachedRolePolicies, iam:GetRole, iam:GetPolicy,iam:DetachRolePolicy, iam:GetPolicyVersion and iam:ListPolicyVersions
すると、アクセス権限のあるサービス一覧にAthenaが追加されました。
再度DataSetの作成でAthenaを選択すると、今度はそれぞれのWorkgroupがエラーなく読み込めました!
athenaWorkGroup
を指定して[Create data source]をクリック。
すると、次は下記のエラーが発生しました。
Your database generated a SQL exception. This can be caused by query timeouts, resource constraints, unexpected DDL alterations before or during a query, and other database errors. Check your database settings and your query, and try again. Show details
[Show details]を開くと次のようにあります。
[Simba]AthenaJDBC An error has been thrown from the AWS Athena client. Unable to verify/create output bucket awsappstack-athenaqueryresultbucket2a96bf28-y8xhzpa8rofj [Execution ID not available]
どうやらAthenaのクエリ結果格納Bucketへのアクセス権限も必要なようです。
クエリ結果格納Bucketの権限を追加します。
[Save]をクリック。
するとまたIAM Roleが更新できない旨のエラーが表示されました。[Save]をクリックしても繰り返し同じエラーが表示されるので、[Cancel]をクリックしてみます。
その後にBucketへのアクセス権限一覧を再度確認してみると、先程追加したはずのBucketのチェックが付いていません。追加出来ていないようです。
そこで調査をしてみたところ、次のドキュメントがヒットしました。
ドキュメントによると、QuickSightがAssumeのために使用するIAM Roleであるaws-quicksight-service-role-v0
およびaws-quicksight-s3-consumers-role-v0
と、それらにアタッチされているManaged Policyを削除し、最後にQuickSightへのアクセスを復旧する手順が紹介されています。
Remove the aws-quicksight-service-role-v0 and aws-quicksight-s3-consumers-role-v0 service roles that QuickSight assumes when interacting with other AWS services. Then, remove the managed policies that QuickSight attaches to aws-quicksight-service-role-v0 and aws-quicksight-s3-consumers-role-v0 service roles. Finally, restore QuickSight access to your AWS services.
上記手順を実施していみます。
まず現在QuickSightへのアクセスで使用しているユーザーがADMIN
Roleであることを確認します。
次にIAMのコンソールの[Roles]で、次のRoleがあれば削除します。
- aws-quicksight-service-role-v0
- aws-quicksight-s3-consumers-role-v0
私の環境では前者が作成されていたので削除しました。
次に[Policies]で、次のManaged Policyがあれば削除します。
- AWSQuickSightRedshiftPolicy
- AWSQuickSightRDSPolicy
- AWSQuickSightIAMPolicy
- AWSQuickSightS3Policy
- AWSQuickSightS3ConsumersPolicy
私の環境でははじめの4つがあったのでそれぞれ削除しました。
QuickSightの管理コンソールに戻り、[Security & permissions]で[Managed]をクリック。
すべてのAWS Serviceに対するアクセス権限が消えていますね。(前述の画面では付いたままに見えましたが...)[Amazon Athena]にチェック。
今度は[Next]をクリック。
Athenaクエリ結果格納Bucketを追加して、[Finish]をクリック。(データソース格納Bucketも追加が必要ですが、後ほど対応します)
[Save]をクリック。
すると次はエラーなく追加が完了できたようです。
少し経つと、再作成されたRoleaws-quicksight-service-role-v0
に次の2つのPolicyが追加されました。
Customer managed PolicyのAWSQuickSightS3Policy
のPolicy内容は以下です。先程追加したAthenaクエリ結果格納Bucketに対するアクセス権限が記述されていますね。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "arn:aws:s3:::*" }, { "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::awsappstack-athenaqueryresultbucket2a96bf28-y8xhzpa8rofj" ] }, { "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::awsappstack-athenaqueryresultbucket2a96bf28-y8xhzpa8rofj/*" ] } ] }
上記Policyが追加されるまでタイムラグ(5分ほど)が若干あります。
再度DatasetとしてAthenaを追加してみます。athenaWorkGroup
を指定して[Create data source]をクリック。
すると次は下記のエラーとなりました。
次はAthenaクエリ結果格納Bucketへの書き込み権限が足りなかったようです。
[Simba]AthenaJDBC An error has been thrown from the AWS Athena client. Access denied when writing to location: s3://awsappstack-athenaqueryresultbucket2a96bf28-y8xhzpa8rofj/result-data/013d2564-ee5e-4dec-8dee-76263b947033.csv
Bucketのアクセス権限で[Write permission for Athena Workgroup]にチェックを入れます。
再度DatasetとしてAthenaを追加すると、今度はエラーなく進めました。
DatabaseとTableを選択して[Select]。
[Visualize]をクリック。
しかしデータのインポートがFailしました。
AthenaのデータソースとなるBucketへのアクセス権限が無いようです。
This is a general SQL error. This can be caused by query timeouts, resource constraints, unexpected DDL alterations before or during a query, and other database errors. Check your database settings and your query, and try again.
Permission denied on S3 path: s3://awsappstack-databucketd8691f4e-hq3iylagrf5h/data [Execution ID: 86ef9e7e-2d71-4ba1-b98a-9c563e395241]
データソースとなるBucketをアクセス可能な一覧に追加します。
5分ほど待つと、IAM PolicyAWSQuickSightS3Policy
に先ほど追加したデータソースとなるBucketに対するアクセス権限が追加されました。
Datasetを使用したAnalyticsでデータをインポートし、可視化することができました!
おわりに
Amazon QuickSightでAthenaのDatasetを作成する際にエラーとなる場合の対処についてでした。
QuickSight×Athenaにおける、ありとあらゆるトラップをを踏んづけた気がします。デフォルトではなくカスタムのAthena Workgroupを使ったこともそのことに拍車を掛けていたでしょう。
しかし注意するべきポイントさえ抑えてしまえば、AWSの機能だけで本格的な可視化やダッシュボード作成ができるのがQuickSightの魅力なので、活用していきたいです。
以上